package factory_method

import "fmt"

// 工厂接口
type FactoryInterface interface {
	CreateProduct(t string) ProductInterface
}

// 创建工厂1并实现工厂接口
type Factory1 struct {
}

func (f Factory1) CreateProduct(t string) ProductInterface {
	switch t {
	case "product1":
		return Product1{}
	case "product2":
		return Product2{}
	default:
		return nil
	}
}

// 创建工厂2并实现工厂接口
type Factory2 struct {
}

func (f Factory2) CreateProduct(t string) ProductInterface {
	switch t {
	case "product2":
		return Product2{}
	default:
		return nil
	}
}

// 产品接口
type ProductInterface interface {
	create()
}

// 创建产品1并实现产品接口
type Product1 struct {
}

func (p Product1) create() {
	fmt.Println("this is product 1")
}

// 创建产品2并实现产品接口
type Product2 struct {
}

func (p Product2) create() {
	fmt.Println("this is product 2")
}
